// 导入函数
//  createRouter：创建路由实例
//  createWebHistory：创建 history 路由模式  localhost:3000/login 没有#号
//  createWebHashHistory：创建 hash 路由模式 localhost:3000/#/login 有#号
import { createRouter, createWebHistory } from 'vue-router'
import { useUserStore } from '@/stores'
// 进度条插件
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'
// 创建路由对象
const router = createRouter({
  // 设置路由模式(history模式)
  //  import.meta.env.BASE_URL：会去 vite.config.ts 中去取出配置项 base 中的值
  //  将来请求页面路径时，会带上这个 base 路径
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    { path: '/login', component: () => import('@/views/Login/index.vue') },
    {
      path: '/',
      component: () => import('@/views/Layout/index.vue'),
      redirect: '/home',
      children: [
        { path: '/home', component: () => import('@/views/home/index.vue'), meta: { title: '首页' } },
        { path: '/article', component: () => import('@/views/article/index.vue'), meta: { title: '健康百科' } },
        { path: '/notify', component: () => import('@/views/notify/index.vue'), meta: { title: '消息中心' } },
        { path: '/user', component: () => import('@/views/user/index.vue'), meta: { title: '我的' } }
      ]
    },
    {
      path: '/user/patient',
      component: () => import('@/views/user/PatientPage.vue'),
      meta: { title: '家庭档案' }
    },
    {
      path: '/consult/fast',
      component: () => import('@/views/Consult/ConsultFast.vue'),
      meta: { title: '极速问诊' }
    },
    {
      path: '/consult/dep',
      component: () => import('@/views/Consult/ConsultDep.vue'),
      meta: { title: '选择科室' }
    },
    {
      path: '/consult/illness',
      component: () => import('@/views/Consult/ConsultIllness.vue'),
      meta: { title: '病情描述' }
    },
    {
      path: '/consult/pay',
      component: () => import('@/views/Consult/ConsultPay.vue'),
      meta: { title: '问诊支付' }
    },
    {
      path: '/room',
      component: () => import('@/views/Room/index.vue'),
      meta: { title: '问诊室' },
      // 某一条路由规则独享的守卫 beforeEnter
      beforeEnter(to) {
        // 判断地址栏上的 payResult 是否是 false，是代表失败，失败跳转到我的问诊页面
        if (to.query.payResult === 'false') return '/user/consult'
      }
    }
  ]
})

router.beforeEach((to) => {
  // 在vue3中在路由中使用 pinia中的数据 不要用全局，当需要时再使用，原因好像是使用 router时pinia中的数据还没有拿到
  const store = useUserStore()
  const token = store.userInfo?.token
  const whiteList = ['/login', '/register']
  Nprogress.start()
  // 得到 meta 中的 title，动态将 title 设置给页面
  if (to.meta.title) {
    document.title = `优医问诊 - ${to.meta.title}`
  }
  if (!token && !whiteList.includes(to.path)) {
    return '/login'
  }
})
router.afterEach(() => {
  Nprogress.done()
})
Nprogress.configure({
  showSpinner: false // 关闭右侧加载动画
})
export default router
